package com.justin.demo;

import com.justin.demo.utils.LogUtils;

public class MyDemo003 {

    /**
     *  synchronized问题
     *  Synchronized保证同一时刻有且只有一条线程在操作数据，其他线程必须等待该线程处理完数据后再对该数据进行操作
     *  底层实现原理完全依赖于JVM，而JVM做到同时只有一个线程在操作数据是因为用的Monitor对象监视器，
     *  可以理解为酒店房卡，进入酒店时，前台Monitor会给一张房卡，通过房卡才能进入房间，而离开酒店时需要把房卡还给前台Monitor
     *
     *
     *  生活中比如火车票，一张票只能卖给一个人，如果多线程情况，可能就会同时把“4车03C”的的票卖给多个人了，所以需要同步锁实现，一张票只能是给一个人
     *
     *  测试结果见控制台
     */
    public static void main(String[] args) throws Exception {
        SellTickets003 sellTickets003 = new SellTickets003() ;

        Thread t1 = new Thread(sellTickets003,"窗口1") ;
        Thread t2 = new Thread(sellTickets003, "窗口2") ;
        Thread t3 = new Thread(sellTickets003, "窗口3") ;

        t1.start();
        t2.start();
        t3.start();

    }

}
